// 给定一个整数数组 nums 和一个目标值 target，请你在该数组中找出两个数，它们的和等于 target。

// 思路1，双指针思路，先把nums排序，用left指针指向左端，right指向右端
// 两个位置上元素和和目标值比较，动态移动left和right指针

// 因为这里要求索引，所以不能排序，所以不能用双指针法
// function twoSum(numbers, target) {
//     numbers.sort((a, b) => a - b)
//     let left = 0
//     let right = numbers.length - 1
//     while (left < right) {
//         let sum = numbers[left] + numbers[right]
//         if (sum === target) {
//             return [left, right]
//         } else if (sum > target) {
//             right--
//         } else {
//             left++
//         }
//     }
//     return [-1, -1]
// }

// // let arr = [1, 2, 3, 4, 5, 6, 7]
// let arr = [3,2,4]
// console.log(twoSum(arr, 6));

// 思路2，哈希表思路
// 一次遍历数组，同时用map存储元素，判断目标值和当前元素的差值是否在map中出现过，如果出现过，返回对应的结果

function twoSum2(nums, target) {
    let map = new Map
    for (let i = 0; i < nums.length; i++) {
        if (map.has(target - nums[i])) {
            return [map.get(target - nums[i]), i]
        } else {
            map.set(nums[i], i)
        }
    }
    return [-1, -1]
}

let arr1 = [1, 2, 3, 4, 5, 6, 7]
console.log(twoSum2(arr1, 6));

